home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / Example_ho2147553232009.psc / CD Tracker / class / clsCDDB.cls next >
Text File  |  2009-03-22  |  8KB  |  242 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsCDDB"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. ' Nome del Progetto: PrinterListFolder
  15. ' ****************************************************************************************************
  16. ' Copyright ⌐ 2008 - 2009 Nome del programmatore - Societα: Nome della societα
  17. ' Tutti i diritti riservati, Indirizzo Internet
  18. ' ****************************************************************************************************
  19. ' Attenzione: Questo programma per computer Φ protetto dalle vigenti leggi sul copyright
  20. ' e sul diritto d'autore. Le riproduzioni non autorizzate di questo codice, la sua distribuzione
  21. ' la distribuzione anche parziale Φ considerata una violazione delle leggi, e sarα pertanto
  22. ' perseguita con l'estensione massima prevista dalla legge in vigore.
  23. ' ****************************************************************************************************
  24.  
  25. Option Explicit
  26.  
  27. Private Type MCI_OPEN_PARMS
  28.     dwCallback       As Long
  29.     wDeviceID        As Long
  30.     lpstrDeviceType  As String
  31.     lpstrElementName As String
  32.     lpstrAlias       As String
  33. End Type
  34.  
  35. Private Type MCI_SET_PARMS
  36.     dwCallback   As Long
  37.     dwTimeFormat As Long
  38.     dwAudio      As Long
  39. End Type
  40.  
  41. Private Type MCI_STATUS_PARMS
  42.     dwCallback  As Long
  43.     dwReturn    As Long
  44.     dwItem      As Long
  45.     dwTrack     As Integer
  46. End Type
  47.  
  48. Private Declare Function mciSendCommand Lib "winmm.dll" Alias "mciSendCommandA" (ByVal wDeviceID As Long, ByVal uMessage As Long, ByVal dwParam1 As Long, ByRef dwParam2 As Any) As Long
  49.     
  50.     Private Const MMSYSERR_NOERROR = 0
  51.     Private Const MCI_CLOSE = &H804
  52.     Private Const MCI_FORMAT_MSF = 2
  53.     Private Const MCI_OPEN = &H803
  54.     Private Const MCI_OPEN_ELEMENT = &H200&
  55.     Private Const MCI_OPEN_TYPE = &H2000&
  56.     Private Const MCI_SET = &H80D
  57.     Private Const MCI_SET_TIME_FORMAT = &H400&
  58.     Private Const MCI_STATUS_ITEM = &H100&
  59.     Private Const MCI_STATUS_LENGTH = &H1&
  60.     Private Const MCI_STATUS_NUMBER_OF_TRACKS = &H3&
  61.     Private Const MCI_STATUS_POSITION = &H2&
  62.     Private Const MCI_TRACK = &H10&
  63.     Private Const MCI_STATUS = &H814
  64.     Private mciOpenParms    As MCI_OPEN_PARMS
  65.     Private mciSetParms     As MCI_SET_PARMS
  66.     Private mciStatusParms  As MCI_STATUS_PARMS
  67.  
  68.     Private Type TTrackInfo
  69.         Minutes     As Long
  70.         Seconds     As Long
  71.         Frames      As Long
  72.         FrameOffset As Long
  73.     End Type
  74.     
  75.     Private m_Error     As Long
  76.     Private m_CID       As String
  77.     Private m_Drive     As String
  78.     Private m_DeviceID  As Long
  79.     Private m_NTracks   As Integer
  80.     Private m_Length    As Long
  81.     Private m_Tracks()  As TTrackInfo
  82.  
  83. Private Sub Class_Initialize()
  84.     m_CID = "Not Ready"
  85.     m_Drive = ""
  86.     m_Error = 0
  87.     m_DeviceID = -1
  88.     m_NTracks = 0
  89. End Sub
  90.  
  91. Public Property Get DiscID() As String
  92.     DiscID = m_CID
  93. End Property
  94.  
  95. Public Property Get ErrorCode() As Long
  96.     Error = m_Error
  97. End Property
  98.  
  99. Public Sub Init(sDrive As String)
  100.     Dim p1 As Integer
  101.     m_Error = MMSYSERR_NOERROR
  102.     m_Drive = sDrive
  103.  
  104.     If OpenCD Then
  105.         Call LoadCDInfo
  106.         CloseCD
  107.     End If
  108. End Sub
  109.  
  110. Private Sub Class_Terminate()
  111.     If m_DeviceID <> -1 Then
  112.         CloseCD
  113.     End If
  114. End Sub
  115.  
  116. Private Function OpenCD() As Boolean
  117.     Dim Scode As Long, wDeviceID As Long
  118.     OpenCD = False
  119.     mciOpenParms.lpstrDeviceType = "cdaudio"
  120.     mciOpenParms.lpstrElementName = m_Drive
  121.     Scode = mciSendCommand(0, MCI_OPEN, (MCI_OPEN_TYPE Or MCI_OPEN_ELEMENT), mciOpenParms)
  122.  
  123.     If Scode <> MMSYSERR_NOERROR Then
  124.         m_Error = Scode
  125.         Exit Function
  126.     End If
  127.     m_DeviceID = mciOpenParms.wDeviceID
  128.     mciSetParms.dwTimeFormat = MCI_FORMAT_MSF
  129.     Scode = mciSendCommand(m_DeviceID, MCI_SET, MCI_SET_TIME_FORMAT, mciSetParms)
  130.  
  131.     If Scode <> MMSYSERR_NOERROR Then
  132.         m_Error = Scode
  133.         Scode = mciSendCommand(m_DeviceID, MCI_CLOSE, 0, 0)
  134.         Exit Function
  135.     End If
  136.     OpenCD = True
  137. End Function
  138.  
  139. Public Sub CloseCD()
  140.     m_Error = mciSendCommand(m_DeviceID, MCI_CLOSE, 0, 0)
  141.     m_DeviceID = -1
  142. End Sub
  143.  
  144. Private Function LoadCDInfo() As Boolean
  145.     
  146.     Dim Scode As Long
  147.     Dim p1 As Long, dwPosM As Long, dwPosS As Long, dwPosF As Long
  148.     Dim dwLenM As Long, dwLenS As Long, dwLenF As Long, dwpos As Long
  149.     Dim sum As Long, p2 As Long
  150.     
  151.     On Error Resume Next
  152.     
  153.     LoadCDInfo = False
  154.     
  155.     mciStatusParms.dwItem = MCI_STATUS_NUMBER_OF_TRACKS
  156.     Scode = mciSendCommand(m_DeviceID, MCI_STATUS, MCI_STATUS_ITEM, mciStatusParms)
  157.  
  158.     If Scode <> MMSYSERR_NOERROR Then
  159.         m_Error = Scode
  160.         Exit Function
  161.     End If
  162.     m_NTracks = mciStatusParms.dwReturn
  163.     ReDim m_Tracks(m_NTracks + 1) As TTrackInfo
  164.  
  165.     For p1 = 1 To m_NTracks
  166.         mciStatusParms.dwItem = MCI_STATUS_POSITION
  167.         mciStatusParms.dwTrack = p1
  168.         Scode = mciSendCommand(m_DeviceID, MCI_STATUS, MCI_STATUS_ITEM Or MCI_TRACK, mciStatusParms)
  169.  
  170.         If Scode <> MMSYSERR_NOERROR Then
  171.             m_Error = Scode
  172.             Exit Function
  173.         End If
  174.         m_Tracks(p1 - 1).Frames = (mciStatusParms.dwReturn \ 65536) And &HFF
  175.         m_Tracks(p1 - 1).Seconds = (mciStatusParms.dwReturn \ 256) And &HFF
  176.         m_Tracks(p1 - 1).Minutes = (mciStatusParms.dwReturn) And &HFF
  177.         m_Tracks(p1 - 1).FrameOffset = (m_Tracks(p1 - 1).Minutes * 60 * 75) + (m_Tracks(p1 - 1).Seconds * 75) + (m_Tracks(p1 - 1).Frames)
  178.     Next p1
  179.     
  180.     mciStatusParms.dwItem = MCI_STATUS_LENGTH
  181.     mciStatusParms.dwTrack = m_NTracks
  182.     Scode = mciSendCommand(m_DeviceID, MCI_STATUS, MCI_STATUS_ITEM Or MCI_TRACK, mciStatusParms)
  183.  
  184.     If Scode <> MMSYSERR_NOERROR Then
  185.         m_Error = Scode
  186.         Exit Function
  187.     End If
  188.     
  189.     dwLenM = (mciStatusParms.dwReturn) And &HFF
  190.     dwLenS = (mciStatusParms.dwReturn \ 256) And &HFF
  191.     dwLenF = ((mciStatusParms.dwReturn \ 65536) And &HFF) + 1
  192.     dwPosM = m_Tracks(m_NTracks - 1).Minutes
  193.     dwPosS = m_Tracks(m_NTracks - 1).Seconds
  194.     dwPosF = m_Tracks(m_NTracks - 1).Frames
  195.     dwpos = (dwPosM * 60 * 75) + (dwPosS * 75) + dwPosF + (dwLenM * 60 * 75) + (dwLenS * 75) + dwLenF
  196.     m_Tracks(m_NTracks).Frames = dwpos Mod 75
  197.     dwpos = dwpos \ 75
  198.     m_Tracks(m_NTracks).Seconds = dwpos Mod 60
  199.     dwpos = dwpos \ 60
  200.     m_Tracks(m_NTracks).Minutes = dwpos
  201.     m_Length = ((m_Tracks(m_NTracks).Minutes * 60) + (m_Tracks(m_NTracks).Seconds)) - ((m_Tracks(0).Minutes * 60) + (m_Tracks(0).Seconds))
  202.     sum = 0
  203.  
  204.     For p1 = 0 To m_NTracks - 1
  205.         p2 = m_Tracks(p1).Minutes * 60 + m_Tracks(p1).Seconds
  206.         Do While p2 > 0
  207.             sum = sum + (p2 Mod 10)
  208.             p2 = p2 \ 10
  209.         Loop
  210.     Next p1
  211.     m_CID = LCase$(LeftZeroPad(Hex$(sum Mod &HFF), 2) & LeftZeroPad(Hex$(m_Length), 4) & LeftZeroPad(Hex$(m_NTracks), 2))
  212.     LoadCDInfo = True
  213.  
  214. End Function
  215.  
  216. Public Function QueryString() As String
  217.     
  218.     Dim p1 As Integer, s As String
  219.     
  220.     On Error GoTo chk
  221.     s = "cddb" & "+" & "query" & "+" & m_CID & "+" & m_NTracks
  222.     For p1 = 0 To m_NTracks - 1
  223.         s = s & "+" & Format$(m_Tracks(p1).FrameOffset)
  224.     Next
  225.     QueryString = s & "+" & Format$(m_Tracks(m_NTracks).Minutes * 60) + (m_Tracks(m_NTracks).Seconds)
  226. chk:
  227.     Select Case Err.Number
  228.         Case 0
  229.         Case 9
  230.                 QueryString = "Not Ready!"
  231.             Exit Function
  232.         Case Else
  233.                 MsgBox "Error #" & Err.Number & "." & vbCrLf & Err.Description, vbCritical, App.Title
  234.             Exit Function
  235.     End Select
  236. End Function
  237.  
  238. Private Function LeftZeroPad(s As String, n As Integer) As String
  239.     If Len(s) < n Then LeftZeroPad = String$(n - Len(s), "0") & s Else LeftZeroPad = s
  240. End Function
  241.  
  242.